import serial

port='/dev/ttyUSB1'
baud_rate=100000
timeout=1
ser = serial.Serial(
            port=port,
            baudrate=baud_rate,
            bytesize=8,
            parity='E',
            stopbits=2,
            timeout=timeout
        )
while True:
    try:
        # 尝试读取一个字节
        byte = ser.read(1)
        if not byte:  # 如果超时返回空字节对象
            # 清除输入缓冲区
            ser.flushInput()
            continue
        # 通道列表
        channels_list=[]
        if byte == b'\x0F':  # 检测到帧头
            frame = ser.read(24)  # 读取剩余的24个字节
            if frame and frame[-1] == 0x00:  # 检查帧尾
                # 添加标志位
                channels_list.append(frame[22])
                
                # 解析第二个通道的数据（左手摇杆前后）
                data1 = frame[1]  # 第一个字节
                data2 = frame[2]  # 第二个字节
                channel_data = (data1>>3 |data2<<5)& 0x07FF
                channels_list.append(channel_data-1195)
                
                # 解析第四个通道的数据（左手摇杆左右）
                data1 = frame[4]  # 第五个字节
                data2 = frame[5]  # 第六个字节
                channel_data = ((data1 >> 1) | (data2 << 7))& 0x07FF  # 组合成11位的数据
                channels_list.append(channel_data-865)
                
                # 解析第三个通道的数据（右手摇杆前后）
                data1 = frame[2]  # 第一个字节
                data2 = frame[3]  # 第二个字节
                data3 = frame[4]  # 第三个字节
                channel_data = (data1>>6 |data2<<2 |data3<<10)& 0x07FF
                channels_list.append(channel_data)
                
                # 解析第一个通道的数据(右手摇杆左右)
                data1 = frame[0]  # 第一个字节
                data2 = frame[1]  # 第二个字节
                channel_data =   (data1|data2<<8) & 0x07FF  # 组合成11位的数据
                channels_list.append(channel_data-1185)
                
                # 解析第五个通道的数据（左开关）
                data1 = frame[5]  # 第五个字节
                data2 = frame[6]  # 第六个字节
                channel_data = ((data1 >> 4) | (data2 << 4))& 0x07FF  # 组合成11位的数据
                channels_list.append(channel_data)
                
                # 解析第六个通道的数据（右开关）
                data1 = frame[6]  # 第五个字节
                data2 = frame[7]  # 第六个字节
                data3 = frame[8]  # 第六个字节
                channel_data = ((data1 >> 7) | (data2 << 1) | (data3 << 9) )& 0x07FF  # 组合成11位的数据
                channels_list.append(channel_data)

                print(channels_list)
                pass
            else:
                # 如果帧不完整或帧尾不正确，清除输入缓冲区
                ser.flushInput()
    except KeyboardInterrupt:
        ser.close()
        break